package com.ruoyi.system.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.system.domain.SysDataset;
import com.ruoyi.system.domain.SysDatasetVersion;
import com.ruoyi.system.domain.vo.SysDatasetQuery;

/**
 * 数据集配置Mapper接口
 * 
 * @author ruoyi
 */
public interface SysDatasetMapper
{
    /**
     * 查询数据集配置
     * 
     * @param datasetId 数据集配置ID
     * @return 数据集配置
     */
    public SysDataset selectDatasetById(Long datasetId);

    /**
     * 根据数据集编码查询数据集配置
     * 
     * @param datasetCode 数据集编码
     * @return 数据集配置
     */
    public SysDataset selectDatasetByCode(String datasetCode);

    /**
     * 查询数据集配置列表
     * 
     * @param datasetQuery 数据集配置查询参数
     * @return 数据集配置集合
     */
    public List<SysDataset> selectDatasetList(SysDatasetQuery datasetQuery);

    /**
     * 查询所有启用的数据集
     * 
     * @return 数据集列表
     */
    public List<SysDataset> selectEnabledDataset();

    /**
     * 新增数据集配置
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public int insertDataset(SysDataset dataset);

    /**
     * 修改数据集配置
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public int updateDataset(SysDataset dataset);

    /**
     * 更新数据集的数据量
     * 
     * @param datasetId 数据集ID
     * @param dataCount 数据量
     * @return 结果
     */
    public int updateDatasetCount(@Param("datasetId") Long datasetId, @Param("dataCount") Long dataCount);

    /**
     * 更新数据集的元数据
     * 
     * @param datasetId 数据集ID
     * @param metadata 元数据
     * @return 结果
     */
    public int updateDatasetMetadata(@Param("datasetId") Long datasetId, @Param("metadata") String metadata);

    /**
     * 删除数据集配置
     * 
     * @param datasetId 数据集配置ID
     * @return 结果
     */
    public int deleteDatasetById(Long datasetId);

    /**
     * 批量删除数据集配置
     * 
     * @param datasetIds 需要删除的数据集配置ID
     * @return 结果
     */
    public int deleteDatasetByIds(Long[] datasetIds);

    /**
     * 校验数据集编码是否唯一
     * 
     * @param datasetCode 数据集编码
     * @return 结果
     */
    public SysDataset checkDatasetCodeUnique(String datasetCode);

    /**
     * 根据数据源ID查询数据集列表
     * 
     * @param datasourceId 数据源ID
     * @return 数据集列表
     */
    public List<SysDataset> selectDatasetByDatasourceId(String datasourceId);

    // 版本管理相关方法
    
    /**
     * 查询数据集版本历史
     * 
     * @param datasetId 数据集ID
     * @return 版本历史列表
     */
    public List<SysDatasetVersion> selectDatasetVersionList(Long datasetId);

    /**
     * 查询指定版本
     * 
     * @param versionId 版本ID
     * @return 版本信息
     */
    public SysDatasetVersion selectDatasetVersionById(Long versionId);

    /**
     * 新增数据集版本
     * 
     * @param version 版本信息
     * @return 结果
     */
    public int insertDatasetVersion(SysDatasetVersion version);

    /**
     * 更新数据集版本状态
     * 
     * @param datasetId 数据集ID
     * @param isCurrent 是否为当前版本
     * @return 结果
     */
    public int updateDatasetVersionStatus(@Param("datasetId") Long datasetId, @Param("isCurrent") String isCurrent);

    /**
     * 将指定版本设为当前版本
     * 
     * @param versionId 版本ID
     * @return 结果
     */
    public int updateDatasetVersionToCurrent(Long versionId);

    /**
     * 删除数据集版本
     * 
     * @param versionId 版本ID
     * @return 结果
     */
    public int deleteDatasetVersionById(Long versionId);

    /**
     * 批量删除数据集版本
     * 
     * @param versionIds 版本ID列表
     * @return 结果
     */
    public int deleteDatasetVersionByIds(Long[] versionIds);
}